package com.heima.service.impl;



import cn.hutool.core.util.IdUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.heima.annotation.AutoFill;
import com.heima.common.enumeration.OperationType;
import com.heima.mapper.SkuSearchServiceMapper;

import com.heima.pojo.dto.SkuDto;
import com.heima.pojo.dto.SkuQueryDto;
import com.heima.pojo.dto.SkuSearchDto;
import com.heima.pojo.entity.Sku;
import com.heima.pojo.vo.SkuSearchVo;
import com.heima.service.SkuSearchService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
@Slf4j
public class SkuSearchServiceImpl extends ServiceImpl<SkuSearchServiceMapper,Sku> implements SkuSearchService {

    @Autowired
    private SkuSearchServiceMapper mapper;

    /**
     * 商品搜索
     * @param dto
     * @return
     */
    @Override
    public SkuSearchDto<SkuSearchVo> getSearch(SkuQueryDto dto) {
        log.info("分页查询，{}",dto);
        //分页查询
        PageHelper.startPage(dto.getPageIndex(),dto.getPageSize());
        //查
        List<SkuSearchVo> list = mapper.getSearch(dto);
        //返回给前端
        PageInfo<SkuSearchVo> pageInfo = new PageInfo<>(list);
        //创建并返回结果
        return SkuSearchDto.<SkuSearchVo>builder()
                .pageIndex(String.valueOf(pageInfo.getPageNum()))//当前页码
                .pageSize(String.valueOf(pageInfo.getPageSize()))
                .totalCount(String.valueOf(pageInfo.getTotal()))
                .totalPage(String.valueOf(pageInfo.getPages()))
                .currentPageRecords(list)
                .build();
    }

    /**
     * 新增商品
     * @param skuDto
     */
    @Override
    public void add(SkuDto skuDto) {
        log.info("新增商品,{}",skuDto);
        Sku sku = new Sku();
        BeanUtils.copyProperties(skuDto,sku);
        //  使用雪花算法生成 Long 类型的 skuId
        long skuId = IdUtil.getSnowflake(1, 1).nextId(); // workerId=1, datacenterId=1
        sku.setSkuId(skuId);
        mapper.addAll(sku);

    }
    /**
     * 修改商品
     * @param skuDto
     */
    @Override
    @AutoFill(value = OperationType.UPDATE)
    public void updates(SkuDto skuDto) {
        log.info("修改商品，{}", skuDto);

        // 检查ID是否存在
        if (skuDto.getSkuId() == null || skuDto.getSkuId().isEmpty()) {
            throw new RuntimeException("商品ID不能为空");
        }

        Sku sku = new Sku();
        BeanUtils.copyProperties(skuDto, sku);
        log.debug("转换后的Sku实体: {}", sku);

        // 确保转换后的skuId是Long类型
        try {
            sku.setSkuId(Long.valueOf(skuDto.getSkuId()));
        } catch (NumberFormatException e) {
            throw new RuntimeException("商品ID格式不正确");
        }

        int result = mapper.updates(sku);  // 使用正确的mapper方法
        log.info("更新结果，影响行数: {}", result);
        if (result == 0) {
            log.warn("未找到要更新的商品，可能商品ID不存在");
            throw new RuntimeException("更新失败，商品不存在");
        }
    }


}
